package com.sxj.corejava.code08_常用类.String类;

import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2025年01月10日
 */
public class Test01_定义方式 {

    public static void main(String[] args) {
        // 方式一:直接创建
        // 字符串属于引用数据类型,但是该方式不符合引用数据的特点,不符合面向对象的特征
        // 该方式的数据并没有存储到堆中
        // 由于字符串太常用了,因此JVM对其进行了优化,使得其具有部分基本数据类型的特征
        // 支持直接赋值,但是其存储的位置并不在堆中,而是存储在常量池中
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1 == s2);


        // 方式二:使用构造方法创建对象
        String s3 = new String();
        System.out.println(s3);
        // 其值相当于下面的s4
        String s4 = "";

        // 如果构造函数的参数是一个byte数组,其值对应的是相应字符的ASCII码
        byte[] bs = {97, 100, 109, 105, 110};
        String s5 = new String(bs);
        System.out.println(s5);

        char[] cs = {'a', 'd', 'm', 'i', 'n'};
        String s6 = new String(cs);
        System.out.println(s6);

        String s7 = new String("admin");
        System.out.println(s7);
        System.out.println(s5 == s6);
        System.out.println(s5.equals(s6));
        String s8 = "admin";
        System.out.println(s7 == s8);
        System.out.println(s7.equals(s8));
    }

}
